// pages/cart/index.js
import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWx.js";
import regeneratorRuntime, { async } from "../../libs/runtime/runtime";
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
  onShow(){
    //获取缓存中的收货地址信息
    const address=wx.getStorageSync("address");
    //获取缓存中 购物车数据
    const cart=wx.getStorageSync('cart')||[];
    // //计算全选
    // //const allChecked=cart.length?cart.every(v=>v.checked):false;
    // let totalPrice=0;
    // let totalNum=0;
    // let allChecked=true;
    // cart.forEach(v=>{
    //   if(v.checked){
    //     totalNum+=v.num;
    //     totalPrice+=v.num*v.goods_price;
    //   }else{
    //     allChecked=false;
    //   }
    // })
    // //判断数组是否为空
    // allChecked=cart.length!=0?allChecked:false;
    // //给data赋值
    // this.setData({
    //   address,
    //   cart,
    //   allChecked,
    //   totalNum,
    //   totalPrice
    // });
    this.setData({
      address
    });
    this.setCart(cart);

  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
//点击收货地址触发
 async handleChooseAddress(){
  // wx.getSetting({
  //   success: (result)=>{
  //     const scopeAddress=result.authSetting['scope.address'];
  //     if(scopeAddress===true||scopeAddress===undefined){
  //       wx.chooseAddress({
  //         success: (result1) => {

  //         },
  //       })
  //     }else{
  //       //用户以前拒绝过授予权限
  //       wx.openSetting({
  //         success:(result2)=>{
  //           wx.chooseAddress({
  //             success: (result3) => {

  //             }
  //           });
  //         }
  //       });
  //     }
  //   }
  // })

    //1.获取权限状态
  const res1=await getSetting();
  const scopeAddress=res1.authSetting['scope.address'];
  //判断权限状态
  if(scopeAddress===true||scopeAddress===undefined){
    //3.调用获取收货地址的api
    const res2=await chooseAddress();
    wx.setStorageSync('address', res2);
  }else{
    //3.诱导用户打开授权页面
    await openSetting();
    //4.调用获取收货地址的api
    const res2=await chooseAddress();
    //5.存入到缓存中
    wx.setStorageSync('address', res2);
  }
  
},
//商品的选中
handeItemChange(e){
  //1.获取被修改的商品的id
  const goods_id=e.currentTarget.dataset.id;
  //2.获取购物车数组
  let {cart}=this.data;
  //3.找到被修改的商品对象
  let index=cart.findIndex(v=>v.goods_id===goods_id);
  //选中状态取反
  cart[index].checked=!cart[index].checked;
  //把购物车数量重新设置回data中和缓存中
  this.setCart(cart);
},
//设置购物车状态的同时 重新计算 底部工具的数据 全选 总价格 购买的数量
setCart(cart){
  
  //重新赋值
  let totalPrice=0;
  let totalNum=0;
  let allChecked=true;
  cart.forEach(v=>{
    if(v.checked){
      totalNum+=v.num;
      totalPrice+=v.num*v.goods_price;
    }else{
      allChecked=false;
    }
  })
  //判断数组是否为空
  allChecked=cart.length!=0?allChecked:false;
  //给data赋值
  this.setData({
    cart,
    allChecked,
    totalNum,
    totalPrice
  });
  wx.setStorageSync('cart', cart);
},
//商品全选
handleItemAllCheck(){
  // 1 获取data数据
  let {cart,allChecked}=this.data;
  // 2 修改值
  allChecked=!allChecked;
  // 3 循环修改cart数组 中的商品选中状态
  cart.forEach(v=>v.checked=allChecked);
  // 4 把修改后的值填充回data或者缓存中
  this.setCart(cart);
},
//商品数量编辑功能
async handleItemNumEdit(e){
  // 1 获取传递过来的参数
  const {operation,id}=e.currentTarget.dataset;
  // 2 获取购物车数组
  let {cart}=this.data;
  // 3 找到需要修改的商品的索引
  const index= cart.findIndex(v=>v.goods_id===id);
  //判断是否要删除
  if(cart[index].num===1&&operation===-1){
    const res= await showModal({content:"您是否要删除?"});
    if(res.confirm){
      cart.splice(index,1);
      this.setCart(cart);
      }
    }else{
        // 4 修改数量
        cart[index].num+=operation;
        // 5 设置回缓存和data中
        this.setCart(cart);
      }
    //弹窗提示
    // wx.showModal({
    //   title:'提示',
    //   content:"您是否要删除?",
    //   success:(res)=>{
    //     if(res.confirm){
    //       cart.splice(index,1);
    //       this.setCart(cart);
    //     }else if(res.cancel){

    //     }
    //   }
    // })
},
async handlePay(){
  // 1 判断收货地址
  const {address,totalNum}=this.data;
  if(!address.userName){
    await showToast({title:"您还没有选择收货地址"});
    return;
  }
  // 2 判断用户有没有选购商品
  if(totalNum===0){
    await showToast({title:"您还没有选择商品"});
    return;
  }
  //跳转支付页面
  wx.navigateTo({
    url:'/pages/pay/index',
  })
}
})